package br.com.admGearman.seguranca.vo;

import java.io.Serializable;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Proxy;
import org.hibernate.annotations.Type;

import br.com.admGearman.cadastro.vo.EstEmpresaVo;
import br.com.admGearman.seguranca.vo.filtro.FiltroUsuarioVo;
import br.com.r2.util.tipodado.CNPJ;
import br.com.r2.util.tipodado.DataHora;
import br.com.r2.util.tipodado.Flag;
import br.com.r2.util.tipodado.InteiroLongo;
import br.com.r2.util.tipodado.Texto;

@Entity
@Table(name = "TBUSR")
@Proxy(lazy = true)
public class UsuarioVo implements Serializable
{

   private static final long serialVersionUID = 1L;

   @Id
   @Column(name = "USRCD")
   @GeneratedValue(generator = "InteiroSequenceGenerator")
   @GenericGenerator(name = "InteiroSequenceGenerator", strategy = "br.com.r2.util.tipodado.hibernate.generator.InteiroSequenceGenerator", parameters = { @Parameter(name = "sequence", value = "SQUSR") })
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroLongoUT")
   private InteiroLongo codigo;

   @Column(name = "USRNM")
   @Type(type = "br.com.r2.util.tipodado.hibernate.TextoUT")
   private Texto nome;

   @Column(name = "USRFGATV")
   @Type(type = "br.com.r2.util.tipodado.hibernate.FlagUT")
   private Flag flagAtivo;

   @Column(name = "USRLGN")
   @Type(type = "br.com.r2.util.tipodado.hibernate.TextoUT")
   private Texto login;

   @Column(name = "USRSNH")
   private String senha;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "USRCDINC")
   private UsuarioVo usuarioInclusaoVo;

   @Column(name = "USRDTINC")
   @Type(type = "br.com.r2.util.tipodado.hibernate.DataHoraUT")
   private DataHora dataInclusao;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "USRCDALT")
   private UsuarioVo usuarioAlteracaoVo;

   @Column(name = "USRDTALT")
   @Type(type = "br.com.r2.util.tipodado.hibernate.DataHoraUT")
   private DataHora dataAlteracao;

   @Column(name = "CNPJ")
   @Type(type = "br.com.r2.util.tipodado.hibernate.CnpjUT")
   private CNPJ cnpj;

   @Column(name = "USRFGALTSNH")
   @Type(type = "br.com.r2.util.tipodado.hibernate.FlagUT")
   private Flag flagAlterarSenha;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "EST_EMPRESA")
   private EstEmpresaVo estEmpresaVo;

   @Transient
   private String senhaAtual;

   @Transient
   private String confirmacaoSenha;

   @Transient
   private FiltroUsuarioVo filtroVo;

   @OneToMany(mappedBy = "usuarioVo", fetch = FetchType.LAZY)
   @Cascade(CascadeType.ALL)
   private Set<ExtensaoUsuarioVo> listaExtensaoUsuarioVo;

   public InteiroLongo getCodigo()
   {
      return codigo;
   }

   public void setCodigo(InteiroLongo codigo)
   {
      this.codigo = codigo;
   }

   public Texto getNome()
   {
      return nome;
   }

   public void setNome(Texto nome)
   {
      this.nome = nome;
   }

   public Flag getFlagAtivo()
   {
      return flagAtivo;
   }

   public void setFlagAtivo(Flag flagAtivo)
   {
      this.flagAtivo = flagAtivo;
   }

   public Texto getLogin()
   {
      return login;
   }

   public void setLogin(Texto login)
   {
      this.login = login;
   }

   public String getSenha()
   {
      return senha;
   }

   public void setSenha(String senha)
   {
      this.senha = senha;
   }

   public UsuarioVo getUsuarioInclusaoVo()
   {
      return usuarioInclusaoVo;
   }

   public void setUsuarioInclusaoVo(UsuarioVo usuarioInclusaoVo)
   {
      this.usuarioInclusaoVo = usuarioInclusaoVo;
   }

   public DataHora getDataInclusao()
   {
      return dataInclusao;
   }

   public void setDataInclusao(DataHora dataInclusao)
   {
      this.dataInclusao = dataInclusao;
   }

   public UsuarioVo getUsuarioAlteracaoVo()
   {
      return usuarioAlteracaoVo;
   }

   public void setUsuarioAlteracaoVo(UsuarioVo usuarioAlteracaoVo)
   {
      this.usuarioAlteracaoVo = usuarioAlteracaoVo;
   }

   public DataHora getDataAlteracao()
   {
      return dataAlteracao;
   }

   public void setDataAlteracao(DataHora dataAlteracao)
   {
      this.dataAlteracao = dataAlteracao;
   }

   public CNPJ getCnpj()
   {
      return cnpj;
   }

   public void setCnpj(CNPJ cnpj)
   {
      this.cnpj = cnpj;
   }

   public Flag getFlagAlterarSenha()
   {
      return flagAlterarSenha;
   }

   public void setFlagAlterarSenha(Flag flagAlterarSenha)
   {
      this.flagAlterarSenha = flagAlterarSenha;
   }

   public EstEmpresaVo getEstEmpresaVo()
   {
      return estEmpresaVo;
   }

   public void setEstEmpresaVo(EstEmpresaVo empresaVo)
   {
      this.estEmpresaVo = empresaVo;
   }

   public String getSenhaAtual()
   {
      return senhaAtual;
   }

   public void setSenhaAtual(String senhaAtual)
   {
      this.senhaAtual = senhaAtual;
   }

   public String getConfirmacaoSenha()
   {
      return confirmacaoSenha;
   }

   public void setConfirmacaoSenha(String confirmacaoSenha)
   {
      this.confirmacaoSenha = confirmacaoSenha;
   }

   public Set<ExtensaoUsuarioVo> getListaExtensaoUsuarioVo()
   {
      return listaExtensaoUsuarioVo;
   }

   public void setListaExtensaoUsuarioVo(Set<ExtensaoUsuarioVo> listaExtensaoUsuarioVo)
   {
      this.listaExtensaoUsuarioVo = listaExtensaoUsuarioVo;
   }

   public FiltroUsuarioVo getFiltroVo()
   {
      return filtroVo;
   }

   public void setFiltroVo(FiltroUsuarioVo filtro)
   {
      this.filtroVo = filtro;
   }

   
}
